home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / New System Software Extensions / OpenDoc A6 / OpenDoc Parts Framework / OPF / Found / FWTaskG / Sources / FWPriTas.cpp < prev    next >
Encoding:
Text File  |  1994-04-21  |  3.6 KB  |  129 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWPriTas.cpp
  4. //    Release Version:    $ 1.0d1 $
  5. //
  6. //    Creation Date:        3/25/94
  7. //
  8. //    Copyright:    © 1994 by Apple Computer, Inc., all rights reserved.
  9. //
  10. //========================================================================================
  11.  
  12. #ifndef FWPRITAS_H
  13. #include "FWPriTas.h"
  14. #endif
  15.  
  16. #ifndef FWPRIMEM_H
  17. #include "FWPriMem.h"
  18. #endif
  19.  
  20. #ifdef FW_HAS_INSTANCE_DATA
  21. void*    FW_CPrivTaskGlobals::gTaskGlobalData = 0;
  22. #endif
  23.  
  24. #ifdef FW_BUILD_WIN
  25. #include <Windows.h>
  26. #endif
  27.  
  28. #ifdef FW_BUILD_MAC
  29. #include <SegLoad.h>
  30. #endif
  31.  
  32. //----------------------------------------------------------------------------------------
  33. //    FW_CPrivTaskGlobals::Initialize
  34. //----------------------------------------------------------------------------------------
  35.  
  36. void FW_CPrivTaskGlobals::Initialize()
  37. {
  38.     // Nothing to do here, the two globals for this unit are initialized when the
  39.     // entire task globals block is allocated or reallocated.
  40. }
  41.  
  42. //----------------------------------------------------------------------------------------
  43. //    FW_CPrivTaskGlobals::Terminate
  44. //----------------------------------------------------------------------------------------
  45.  
  46. void FW_CPrivTaskGlobals::Terminate()
  47. {
  48.     FW_PrimitiveFreeBlock(GetTaskGlobals());
  49. }
  50.  
  51. //----------------------------------------------------------------------------------------
  52. //    FW_CPrivTaskGlobals::GetTaskGlobals
  53. //----------------------------------------------------------------------------------------
  54.  
  55. void* FW_CPrivTaskGlobals::GetTaskGlobals()
  56. {
  57.     register void* p = PrivGetTaskGlobals();
  58.     if (p == 0)
  59.         p = AllocateTaskGlobals();
  60.     if (p == 0)
  61.         FatalExit();
  62.     return p;
  63. }
  64.  
  65. //----------------------------------------------------------------------------------------
  66. //    FW_CPrivTaskGlobals::AllocateTaskGlobals
  67. //----------------------------------------------------------------------------------------
  68.  
  69. void*    FW_CPrivTaskGlobals::AllocateTaskGlobals()
  70. {
  71.     char *p = (char *) FW_PrimitiveAllocateBlock(kDefaultGlobalsBlockSize);
  72.     if (p == 0)
  73.         FatalExit();
  74.     for (int i=0; i<kDefaultGlobalsBlockSize; i++)
  75.         p[i] = 0;
  76.     PrivSetTaskGlobals((void *) p);
  77.     ((FW_SPrivTaskGlobalsHeader*)p)->gPrivTaskGlobalsSize = kDefaultGlobalsBlockSize;
  78.     ((FW_SPrivTaskGlobalsHeader*)p)->gThisBlock = p;
  79.     return p;
  80. }
  81.  
  82. //----------------------------------------------------------------------------------------
  83. //    FW_CPrivTaskGlobals::ResizeTaskGlobals
  84. //----------------------------------------------------------------------------------------
  85.  
  86. void    FW_CPrivTaskGlobals::ResizeTaskGlobals(unsigned short size)
  87. {
  88.     unsigned short oldSize, i;
  89.     
  90.     char *oldBlock = (char *) GetTaskGlobals();
  91.     if (oldBlock == 0)
  92.         oldSize = 0;
  93.     else
  94.         oldSize = GetTaskGlobalsHeader().gPrivTaskGlobalsSize;
  95.  
  96.     if (oldSize < size)
  97.     {
  98.         char *newBlock = (char *) FW_PrimitiveAllocateBlock(size);
  99.         if (newBlock == 0)
  100.             FatalExit();
  101.         for (i=0; i<oldSize; i++)
  102.             newBlock[i] = oldBlock[i];
  103.         for (; i < size; i++)
  104.             newBlock[i] = 0;
  105.         PrivSetTaskGlobals(newBlock);
  106.         ((FW_SPrivTaskGlobalsHeader*)newBlock)->gPrivTaskGlobalsSize = size;
  107.         ((FW_SPrivTaskGlobalsHeader*)newBlock)->gThisBlock = newBlock;
  108.     }
  109.     
  110.     FW_PrimitiveFreeBlock(oldBlock);
  111. }
  112.  
  113. //----------------------------------------------------------------------------------------
  114. //    FW_CPrivTaskGlobals::FatalExit
  115. //----------------------------------------------------------------------------------------
  116.  
  117. void FW_CPrivTaskGlobals::FatalExit()
  118. {
  119. #if defined FW_BUILD_MAC
  120.     ::Debugger();
  121.     ::ExitToShell();
  122. #elif defined FW_BUILD_WIN
  123. #ifndef FW_BUILD_DOS
  124.     ::DebugBreak();
  125.     ::FatalAppExit(0, "Unable to initialize task globals");
  126. #endif
  127. #endif
  128. }
  129.